socketserver 模块 -> 解决tcp协议在socket的多个客户端不能同时对服务端进行通讯的问题

1. 固定写法

# server.py

import socketserver

class Myserver(socketserver.BaseRequestHandler):  # 继承socketserver中的BaseRequestHandler类
    def handle(self):
 # 在 handle 方法进行数据的收发
# self.request 就相当于 socket 中的 conn
        msg = self.request.recv(1024).decode('utf-8')
        print(msg)
        self.request.send(bytes('你好', encoding='utf-8'))

if __name__ == '__main__':
    server = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), Myserver)  # 实例化一个server对象
    server.allow_reuse_address = True  # 允许服务端重用地址
    server.serve_forever()  # 让server永远运行下去,除非强制停止程序

2. 仿qq -> 实现多个客户端和服务端进行通讯 

# server.py

import socketserver

class Myserver(socketserver.BaseRequestHandler):  # 继承socketserver中的BaseRequestHandler类
    def handle(self):
# 在 handle 方法进行数据的收发
 # self.request 就相当于 socket 中的 conn
        while True:
            msg = self.request.recv(1024).decode('utf-8')
            print(msg)
            if '再见' in msg:
                self.request.send(bytes('再见', encoding='utf-8'))
                break
            info = input('%s>>>' % msg[:4])
            self.request.send(bytes(info, encoding='utf-8'))

if __name__ == '__main__':
    server = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), Myserver)  # 实例化一个server对象
    server.allow_reuse_address = True  # 允许服务端重用地址
    server.serve_forever()  # 让server永远运行下去,除非强制停止程序

# client1.py

import socket

sk = socket.socket()
sk.connect(('127.0.0.1', 8080))
while True:
    info = input('请输入向服务端发送的消息:')
    sk.send(bytes('客户端1:' + info, encoding='utf-8'))
    msg = sk.recv(1024).decode('utf-8')
    print(msg)
    if msg == '再见':
        sk.send(bytes('客户端1:再见', encoding='utf-8'))
        break

sk.close()

# client2.py

import socket

sk = socket.socket()
sk.connect(('127.0.0.1', 8080))
while True:
    info = input('请输入向服务端发送的消息:')
    sk.send(bytes('客户端2:' + info, encoding='utf-8'))
    msg = sk.recv(1024).decode('utf-8')
    print(msg)
    if msg == '再见':
        sk.send(bytes('客户端1:再见', encoding='utf-8'))
        break

sk.close()